<?php
/**
 ******Mysql访问类 ******
 * ============================================================================
 * @Author Luke <myluke@qq.com >
 * @Copyright (C) 2010 iluke.cn All rights reserved. 
 * @Link: http://www.iluek.cn
 * ============================================================================
 */

class Mysql{

	private	$conn;
	public	$_host;
	public	$_port;
	public	$_user;//用户名
	public  $_pwd;//密码
	public	$_name;//数据库名

	/*
	*
	*构造函数
	*
	*/
	function __construct(){
		$this->conn	  =	null;
		$this->_host  =	'localhost';
		$this->_port  =	'3306';
		$this->_user  =	'root';
		$this->_pwd	  =	'123456';
		$this->_name  =	'luke';
		$this->connect();
		$this->select_db();
	}

	 function __destruct(){
    	$this->close();
    }
	/*
	*
	*连接MySQL
	*
	*/
	function connect(){
		#连接数据库
		if(function_exists('mysql_connect')){
		  $this->conn=@mysql_connect($this->_host,$this->_user,$this->_pwd,true);
		}else{
		  trigger_error('Please open the mysql extension!',E_USER_ERROR);
		}
		#验证连接
		if(!$this->conn){
		  trigger_error('Database connect error, please check the database settings!',E_USER_ERROR);
		}
	}
	/*
	*
	*选择数据库
	*/
	function select_db($db=null){
		//判断连接是否正确
		if(!$this->conn) $this->connect();
		if (empty($db)) $db = $this->_name;
		//选择数据库
		if(!mysql_select_db($db,$this->conn)){
		trigger_error(sprintf('%s database not found!',$db),E_USER_WARNING);
		}
		#Mysql数据库设置
		if (version_compare($this->version(), '4.1', '>=')) {
        	mysql_query("SET NAMES utf8;",$this->conn);
        	if(version_compare($this->version(), '5.0.1', '>' )) {
	            mysql_query("SET sql_mode='';",$this->conn);
	        }
        } else {
        	trigger_error('mysql database version lower than 4.1, please upgrade mysql!',E_USER_NOTICE);
        }
	}

	/*
	* 执行sql语句
	* @param   string      $sql 数据库查询语句
	*
	*/
	function query($sql){
		if(empty($sql)){
			trigger_error('Empty Sql',E_USER_ERROR);
		}else{
			$queryOperatet = strtolower(strtok($sql, ' '));
            $result = mysql_query($sql, $this->conn);
            if ($result) {
                switch ($queryOperatet) {
                    case 'insert':
                        $return_value = $this->insert_id();
                        break;
                    case 'select':
                        $return_value = $result;
                        break;
                    default:
                        $return_value = mysql_affected_rows($this->conn);
                }
            } else {
               trigger_error(sprintf(('MySQL Query Error:<br/>SQL:%s<br/>%s'),$sql,$this->error()),E_USER_WARNING);
            }	
		}
	  return $return_value;
	}
	/**
     * 插入数据
     *
     * @param string $table    table
     * @param array  $data     插入数据的数组，key对应列名，value对应值
     * @return int
     */
    function insert($table,$data){
        $cols = array();
        $vals = array();
        foreach ($data as $col => $val) {
            $cols[] = $col;
            $vals[] = $this->escape($val);
        }

        $sql = "INSERT INTO "
             . $this->identifier($table)
             . ' (' . implode(', ', $cols) . ') '
             . 'VALUES (' . implode(', ', $vals) . ')';

             return $this->query($sql);
    }

	 /**
     * 取得数据集的影响行数
     *
     * @param resource $result 可以是MYSQL资源句柄
     * @return string
     */
    function nums($result) {
	  return mysql_num_rows($result);
    	
    }
    /**
     * 取得数据集的单条记录
     *
     * @param resource  $result
     * @return array
     */
    function fetch($result){
        return mysql_fetch_array($result);
    }
	/**
	*
	*取出所有记录
	*@return array
	**/
	function fetch_all($rs){
		while($this->rs=$this->fetch($rs)){
			$arr[]=$this->rs;
			}
		return $arr;
	}
	/**
     * 取得上一步 INSERT 操作产生的 ID
     *
     * @return string
     */
    function insert_id() {
        return ($insert_id = mysql_insert_id($this->conn)) >= 0 ? $insert_id : $this->result("SELECT last_insert_id();");
    }
	/**
     * 返回上一个 MySQL 操作产生的文本错误信息
     *
     * @return string
     */
    function error() {
        return (($this->conn) ? mysql_error($this->conn) : mysql_error());
    }
	/**
     * 返回上一个 MySQL 操作中的错误信息的数字编码
     *
     * @return int
     */
    function errno() {
        return intval(($this->conn) ? mysql_errno($this->conn) : mysql_errno());
    }
	/**
     * 取得 MySQL 服务器信息
     *
     * @return string
     */
    function version(){
        return mysql_get_server_info($this->conn);
    }
	
	/**
     * 释放结果内存
     *
     * @param resource $conn
     * @return bool
     */
    function free($conn){
        if (is_resource($conn)) {
            return mysql_free_result($conn);
        }
    }
    /**
     * 关闭 MySQL 连接
     *
     * @return bool
     */
    function close(){
        if (is_resource($this->conn)) {
            return mysql_close($this->conn);
        }
    }

/**
	安全字符转换
	@param string $s 输出的字符
	@return string
*/
  function escape($s){
	  return addslashes($s);
  }
}
?>